"""
与文本相关的模块
"""
import pygame
from src import window
from src.position.center import center_handler


def gen_text_obj(
        text,
        size=16,
        color=(0, 0, 0, 255),
        is_bold=False,
        is_italic=False,
        font_name='Microsoft YaHei UI'
):
    """
    生成可以绘制在窗口中的文本对象
    :param text: 文本内容
    :param size: 文本大小，默认值 16
    :param color: 文本颜色，默认值 (0, 0, 0, 255)
    :param is_bold: 文本是否加粗，默认值 False
    :param is_italic: 文本是否倾斜，默认值 False
    :param font_name: 文本字体名称，默认值 Microsoft YaHei UI
    :return: 文本对象
    """
    # 创建系统字体对象
    font = pygame.font.SysFont(font_name, size, is_bold, is_italic)
    # 创建文本对象
    text_obj = font.render(text, True, color)
    return text_obj


def draw_text(
        text,
        position=(0, 0),
        is_h_center=False,
        is_v_center=False,
        size=16,
        color=(0, 0, 0),
        is_bold=False,
        is_italic=False,
        font_name='Microsoft YaHei UI'
):
    """
    在窗口中绘制文本
    :param text: 文本内容
    :param position: 文本在窗口中的位置，默认值 (0, 0)
    :param is_h_center: 文本在窗口中的位置是否水平居中，默认值 False
    :param is_v_center: 文本在窗口中的位置是否垂直居中，默认值 False
    :param size: 文本大小，默认值 16
    :param color: 文本颜色，默认值 (0, 0, 0)
    :param is_bold: 文本是否加粗，默认值 False
    :param is_italic: 文本是否倾斜，默认值 False
    :param font_name: 文本字体名称，默认值 Microsoft YaHei UI
    :return: 文本对象和文本 Rect 对象组成的元组
    """
    text_obj = None
    # 如果传递文本内容为文本内容字符串
    if isinstance(text, str):
        text_obj = gen_text_obj(text, size, color, is_bold, is_italic, font_name)
    # 如果传递的文本就是文本对象
    else:
        text_obj = text
    # 对文本在窗口中的位置进行居中处理
    position = center_handler(text_obj, window.win, position, is_h_center, is_v_center)
    # 在窗口中绘制
    text_rect = window.win.blit(text_obj, position)
    return text_obj, text_rect
